package com.mazaiting.redeye.utils.confuse;

import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/***
 *
 *
 *                                                    __----~~~~~~~~~~~------___
 *                                   .  .   ~~//====......          __--~ ~~
 *                   -.            \_|//     |||\\  ~~~~~~::::... /~
 *                ___-==_       _-~o~  \/    |||  \\            _/~~-
 *        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
 *    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
 *  .~       .~       |   \\ -_    /  /-   /   ||      \   /
 * /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
 * |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
 *          '         ~-|      /|    |-~\~~       __--~~
 *                      |-~~-_/ |    |   ~\_   _-~            /\
 *                           /  \     \__   \/~                \__
 *                       _--~ _/ | .-~~____--~-/                  ~~==.
 *                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
 *                                 -_     ~\      ~~---l__i__i__i--~~_/
 *                                 _-~-__   ~)  \--______________--~~
 *                               //.-~~~-~_--~- |-------~~~~~~~~
 *                                      //.-~~~--\
 *                               神兽保佑
 *                              代码无BUG!
 * @author mazaiting
 * @date 2019-06-24
 * @decription MD5 加密工具类
 */
public class Md5Util {
    /**
     * 十六进制数
     */
    private static final String HEX_DIGITS[] = {"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};

    /**
     * 加密
     * @param text 待加密文本
     * @return 加密后的字符串
     */
    public static String encrypt(String text) {
        try {
            // 获取 md5 算法
            MessageDigest messageDigest = MessageDigest.getInstance("MD5");
            return byteArrayToHexString(messageDigest.digest(text.getBytes(Charset.defaultCharset())));
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("无此算法");
        }
    }

    /**
     * 将字节数组转换为字符串
     * @param digest 摘要字符串
     * @return 加密后的十六进制数据
     */
    private static String byteArrayToHexString(byte[] digest) {
        StringBuilder sb = new StringBuilder();
        // 遍历数据
        for (byte b : digest) {
            // 拼接十六进制数据
            sb.append(byteToHexString(b));
        }
        return sb.toString();
    }

    /**
     * 获取十六进制数据
     * @param b 字节
     * @return 双字节字符串
     */
    private static String byteToHexString(byte b) {
        // 赋值
        int n = b;
        // 移除负数
        if (n < 0) {
            n += 256;
        }
        // 取高位
        int d1 = n / 16;
        // 取低位
        int d2 = n % 16;
        return HEX_DIGITS[d1] + HEX_DIGITS[d2];
    }
}





















